home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / STEP17.PAK / STEP17DV.H < prev    next >
C/C++ Source or Header  |  1997-05-06  |  10KB  |  416 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows - (C) Copyright 1994 by Borland International
  3. //   Tutorial application -- step17dv.h
  4. //   Automation Container Server example
  5. //----------------------------------------------------------------------------
  6. #if !defined(STEP17DV_H)
  7. #define STEP17DV_H
  8.  
  9. #if !defined(OCF_OCLINK_H)
  10. # include <ocf/oclink.h>
  11. #endif
  12.  
  13. const int Margin  = 15;   // Margins used for copying selection
  14.  
  15. class _ICLASS TOcPart;
  16. class _USERCLASS TDrawView;
  17.  
  18. typedef TArray<TPoint> TPoints;
  19. typedef TArrayIterator<TPoint> TPointsIterator;
  20.  
  21. class TLine : public TPoints {
  22.   public:
  23.     // Constructor to allow construction from a color and a pen size.
  24.     // Also serves as default constructor.
  25.     TLine(const TColor& color = TColor(0), int penSize = 1) :
  26.       TPoints(10, 0, 10), PenSize(penSize), Color(color), Bound(0, 0, 0, 0),
  27.       Selected(false) {}
  28.  
  29.     // Functions to modify and query pen attributes.
  30.     int QueryPenSize() const
  31.     {
  32.       return PenSize;
  33.     }
  34.  
  35.     const TColor& QueryColor() const
  36.     {
  37.       return Color;
  38.     }
  39.  
  40.     void SetPen(const TColor& newColor, int penSize = 0);
  41.     void SetPen(int penSize);
  42.     friend bool GetPenSize(TWindow* parent, TLine& line);
  43.     friend bool GetPenColor(TWindow* parent, TLine& line);
  44.  
  45.     // TLine draws itself.  Returns true if everything went OK.
  46.     virtual bool Draw(TDC&) const;
  47.     void DrawSelection(TDC& dc);
  48.  
  49.     // The == operator must be defined for the container class, even if unused
  50.     bool operator ==(const TLine& other) const
  51.     {
  52.       return &other == this;
  53.     }
  54.  
  55.     friend ostream& operator <<(ostream& os, const TLine& line);
  56.     friend istream& operator >>(istream& is, TLine& line);
  57.  
  58.     // bound related functions
  59.     void Invalidate(TDrawView& view);
  60.     TPoint& GetPos()
  61.     {
  62.       return Bound.TopLeft();
  63.     }
  64.  
  65.     TSize& GetSize()
  66.     {
  67.       return Bound.Size();
  68.     }
  69.  
  70.     TRect& GetBound()
  71.     {
  72.       return Bound;
  73.     }
  74.  
  75.     void UpdateBound();
  76.     void UpdatePosition(TPoint&);
  77.     void UpdateSize(TSize& newSize);
  78.  
  79.     // Selection
  80.     bool IsSelected()
  81.     {
  82.       return Selected;
  83.     }
  84.  
  85.     void Select(bool select = true)
  86.     {
  87.       Selected = select;
  88.     }
  89.  
  90.     TUIHandle::TWhere Where;
  91.  
  92.   protected:
  93.     int PenSize;
  94.     TColor Color;
  95.     TRect Bound;          // the enclosing rectangle for line
  96.     bool Selected;
  97. };
  98.  
  99. typedef TArray<TLine> TLines;
  100. typedef TArrayIterator<TLine> TLinesIterator;
  101.  
  102. class _USERCLASS TDrawDocument : public TOleDocument {
  103.   public:
  104.     enum {
  105.       PrevProperty = TOleDocument::NextProperty-1,
  106.       LineCount,
  107.       Description,
  108.       NextProperty,
  109.     };
  110.  
  111.     enum {
  112.       UndoNone,
  113.       UndoDelete,
  114.       UndoAppend,
  115.       UndoModify
  116.     };
  117.  
  118.     // OCServer changes begin
  119.     TDrawDocument(TDocument* parent = 0);
  120.     // OCServer changes end
  121.  
  122.    ~TDrawDocument();
  123.  
  124.     // implement virtual methods of TDocument
  125.     bool   Open(int mode, const char far* path=0);
  126.     bool OpenSelection(int mode, const char far* path, TPoint far* where);
  127.     bool   Close();
  128.     bool   Commit(bool force = false);
  129.     bool   CommitSelection(TOleWindow& oleWin, void* userData);
  130.  
  131.     int         FindProperty(const char far* name);  // return index
  132.     int         PropertyFlags(int index);
  133.     const char* PropertyName(int index);
  134.     int         PropertyCount()
  135.     {
  136.       return NextProperty - 1;
  137.     }
  138.  
  139.     int         GetProperty(int index, void far* dest, int textlen=0);
  140.  
  141.     // data access functions
  142.     TLine* GetLine(uint index);
  143.     TLines* GetLines()
  144.     {
  145.       return Lines;
  146.     }
  147.  
  148.     TLine* GetLine(TString& moniker);
  149.     int    AddLine(TLine& line);
  150.     void   DeleteLine(uint index);
  151.     void   ModifyLine(TLine& line, uint index);
  152.     void   Clear();
  153.     void   Undo();
  154.     TSize& GetDocSize(){return DocSize;}
  155.  
  156.   protected:
  157.     TLines* Lines;
  158.     TLine*  UndoLine;
  159.     int     UndoState;
  160.     int     UndoIndex;
  161.     string  FileInfo;
  162.     TSize   DocSize;      // Document size in log unit
  163.  
  164.   private:
  165.     // To not interfere with normal mouse operations, the automation
  166.     // entry points have their own lines with their own attributes.
  167.     long GetPenColor()
  168.     {
  169.       return AutoPenColor;
  170.     }
  171.  
  172.     void SetPenColor(long color)
  173.     {
  174.       AutoPenColor = color;
  175.       AutoLine->SetPen(TColor(color));
  176.     }
  177.  
  178.     short GetPenSize()
  179.     {
  180.       return AutoPenSize;
  181.     }
  182.  
  183.     void SetPenSize(short penSize)
  184.     {
  185.       AutoPenSize = penSize;
  186.       AutoLine->SetPen(penSize);
  187.     }
  188.  
  189.     void AddPoint(short x, short y)
  190.     {
  191.       AutoLine->Add(TPoint(x,y));
  192.     }
  193.  
  194.     void AddLine()
  195.     {
  196.       AddLine(*AutoLine);
  197.       ClearLine();
  198.     }
  199.  
  200.     void ClearLine()
  201.     {
  202.       delete AutoLine;
  203.       AutoLine = new TLine(AutoPenColor, AutoPenSize);
  204.     }
  205.  
  206.     TLine*  AutoLine;
  207.     long    AutoPenColor;
  208.     short   AutoPenSize;
  209.  
  210.   DECLARE_AUTOCLASS(TDrawDocument)
  211.     AUTOPROP(PenSize,    GetPenSize,  SetPenSize,  short, )
  212.     AUTOPROP(PenColor,   GetPenColor, SetPenColor, long, )
  213.     AUTOFUNC2V(AddPoint, AddPoint, short, short, )
  214.     AUTOFUNC0V(AddLine,  AddLine, )
  215.     AUTOFUNC0V(ClearLine,ClearLine, )
  216. };
  217.  
  218.  
  219. //=====================  TDrawLinkView  =======================================
  220.  
  221. class _USERCLASS TDrawLinkView : public TOleLinkView {
  222.   public:
  223.     TDrawLinkView(TDocument& doc, TOcLinkView& view);
  224.    ~TDrawLinkView();
  225.  
  226.     bool VnModify(uint index);
  227.     bool VnDelete(uint index);
  228.  
  229.     static const char far* StaticName()
  230.     {
  231.       return "Draw Link View";
  232.     }
  233.  
  234.     const char far* GetViewName()
  235.     {
  236.       return StaticName();
  237.     }
  238.  
  239.   protected:
  240.     TDrawDocument* DrawDoc;
  241.  
  242.   DECLARE_RESPONSE_TABLE(TDrawLinkView);
  243. };
  244.  
  245. class _USERCLASS TDrawView : public TOleView {
  246.   public:
  247.     TDrawView(TDrawDocument& doc, TWindow* parent = 0);
  248.    ~TDrawView()
  249.     {
  250.       delete Line;
  251.     }
  252.  
  253.     static const char far* StaticName()
  254.     {
  255.       return "Draw View";
  256.     }
  257.  
  258.     const char far* GetViewName()
  259.     {
  260.       return StaticName();
  261.     }
  262.     static void CleanUp(void* userData);
  263.  
  264.     void SetLineSelection(TLine* Line);
  265.     void SetLineSelection(int index);
  266.     TLine* HitTest(TPoint& pt);
  267.     bool Select(uint modKeys, TPoint& point);
  268.     void SetupWindow();
  269.     TLine* GetSelected() {return Selected;}
  270.  
  271.     bool EvOcViewSetLink(TOcLinkView& view);
  272.  
  273.     enum DRAWTOOL {
  274.       DrawSelect = 0,
  275.       DrawPen,
  276.     };
  277.  
  278.   protected:
  279.     // Message response functions
  280.     void EvSize(uint sizeType, TSize& size);
  281.     void EvLButtonDown(uint, TPoint&);
  282.     void EvMouseMove(uint, TPoint&);
  283.     void EvLButtonUp(uint, TPoint&);
  284.     bool ShowCursor(HWND, uint, uint);
  285.     bool EvOcViewPartSize(TOcPartSize far& ps);
  286.     bool EvOcViewShowTools(TOcToolBarInfo far& tbi);
  287.     bool EvOcViewGetItemName(TOcItemName& item);
  288.     bool EvOcViewClipData(TOcFormatData far& format);
  289.  
  290.     // painting
  291.     void Paint(TDC&, bool, TRect&);
  292.     bool PaintSelection(TDC&, bool, TRect&, void* userData = 0);
  293.     bool PaintLink(TDC& dc, bool erase, TRect& rect, TString& moniker);
  294.  
  295.     void CmPenSize();
  296.     void CmPenColor();
  297.     void CmClear();
  298.     void CmUndo();
  299.     void CmEditCut();
  300.     void CmEditCopy();
  301.     void CeEditCut(TCommandEnabler& ce);
  302.     void CeEditCopy(TCommandEnabler& ce);
  303.  
  304.     void CePen(TCommandEnabler&);
  305.     void CeSelect(TCommandEnabler&);
  306.     void CeOrgSize(TCommandEnabler&);
  307.     void CeDoubleSize(TCommandEnabler&);
  308.     void CeHalfSize(TCommandEnabler&);
  309.     void CmPen();
  310.     void CmSelect();
  311.     void CmOrgSize();
  312.     void CmDoubleSize();
  313.     void CmHalfSize();
  314.  
  315.     // Document notifications
  316.     bool VnCommit(bool force);
  317.     bool VnRevert(bool clear);
  318.     bool VnAppend(uint index);
  319.     bool VnDelete(uint index);
  320.     bool VnModify(uint index);
  321.  
  322.     TDrawDocument*    DrawDoc;  // same as Doc member, but cast to derived class
  323.     TPen*             Pen;
  324.     TLine*            Line;     // To hold a single line sent or received from document
  325.     TLine*            Selected; // To hold a single selected line
  326.     DRAWTOOL          Tool;     // current tool selected
  327.     TControlBar*      ToolBar;
  328.  
  329.     // OC client changes end
  330.  
  331.   private:
  332.     void InsertObject(TOcInitInfo &init);
  333.     void AdjustScroller(); // scrolling support
  334.  
  335.   DECLARE_RESPONSE_TABLE(TDrawView);
  336. };
  337.  
  338.  
  339. class _USERCLASS TDrawListView : public TListBox, public TView {
  340.   public:
  341.     TDrawListView(TDrawDocument& doc, TWindow* parent = 0);
  342.    ~TDrawListView(){}
  343.     static const char far* StaticName()
  344.     {
  345.       return "DrawList View";
  346.     }
  347.  
  348.     int CurIndex;
  349.  
  350.     // Overridden virtuals from TView
  351.     //
  352.     const char far* GetViewName()
  353.     {
  354.       return StaticName();
  355.     }
  356.  
  357.     TWindow* GetWindow()
  358.     {
  359.       return (TWindow*)this;
  360.     }
  361.  
  362.     bool SetDocTitle(const char far* docname, int index)
  363.     {
  364.       return TListBox::SetDocTitle(docname, index);
  365.     }
  366.  
  367.     // Overridden virtuals from TWindow
  368.     //
  369.     bool CanClose();
  370.     bool Create();
  371.  
  372.   protected:
  373.     TDrawDocument* DrawDoc;  // same as Doc member, but cast to derived class
  374.     void LoadData();
  375.     void FormatData(const TLine* line, uint index);
  376.  
  377.     // Message response functions
  378.     void CmPenSize();
  379.     void CmPenColor();
  380.     void CmClear();
  381.     void CmUndo();
  382.     void CmDelete();
  383.  
  384.     // Document notifications
  385.     bool VnIsWindow(HWND hWnd)
  386.     {
  387.       return HWindow == hWnd;
  388.     }
  389.  
  390.     bool VnCommit(bool force);
  391.     bool VnRevert(bool clear);
  392.     bool VnAppend(uint index);
  393.     bool VnDelete(uint index);
  394.     bool VnModify(uint index);
  395.  
  396.     // OC server changes
  397.     LRESULT EvOcEvent(WPARAM wParam, LPARAM lParam);
  398.     uint32  EvOcViewPaint(void far*);
  399.  
  400.   DECLARE_RESPONSE_TABLE(TDrawListView);
  401. };
  402.  
  403. const int vnDrawAppend     = vnCustomBase+0;
  404. const int vnDrawDelete     = vnCustomBase+1;
  405. const int vnDrawModify     = vnCustomBase+2;
  406.  
  407. NOTIFY_SIG(vnDrawAppend, uint)
  408. NOTIFY_SIG(vnDrawDelete, uint)
  409. NOTIFY_SIG(vnDrawModify, uint)
  410.  
  411. #define EV_VN_DRAWAPPEND  VN_DEFINE(vnDrawAppend,  VnAppend,   int)
  412. #define EV_VN_DRAWDELETE  VN_DEFINE(vnDrawDelete,  VnDelete,   int)
  413. #define EV_VN_DRAWMODIFY  VN_DEFINE(vnDrawModify,  VnModify,   int)
  414.  
  415. #endif // __STEP17DV_H
  416.